package com.mycompany.client;

import com.google.gwt.user.client.rpc.AsyncCallback;
import com.mycompany.server.GerenciadorUsuarios;

/**
 * The async counterpart of <code>GreetingService</code>.
 */
public interface GreetingServiceAsync {
	void greetServer(String input, AsyncCallback<String> callback)
			throws IllegalArgumentException;
	
	/**
	 * Zera o sistema
	 */
	public void zerarSistema(AsyncCallback<Void> callback);
	
	/**
	 * Responsavel por encerrar o sistema
	 */
	public void encerrarSistema(AsyncCallback<Void> callback);
	
	
	/**
	 * Responsavel por aprovar amizade entre dois usuarios
	 * @param idSessao Sessao do usuario 
	 * @param login Login do usuario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public void aprovarAmizade(String idSessao, String login, AsyncCallback<Void> callback) throws Exception;
	
	/**
	 * Responsavel pelas requisicoes de amizade entre dois usuarios
	 * @param idSessao IdSessao do usuario
	 * @return IdRequisicao de amizade
	 * @throws Exception Caso a idSessao seja invalida
	 */
	public void getRequisicoesDeAmizade(String idSessao, AsyncCallback<String> callback) throws Exception;
	/**
	 * Responsavel por verificar se dois usuarios sao amigos
	 * @param idSessao IdSessao do usuario
	 * @param login Login do usuario
	 * @return true se forem amigos ou false caso contrario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public void ehAmigo(String idSessao, String login, AsyncCallback<String> callback) throws Exception;
	/**
	 * Responsavel por requisitar amizade entre dois usuarios
	 * @param idSessao IdSessao do usuario
	 * @param login Login do usuario
	 * @throws Exception Caso idSessao ou login sejam invalidos
	 */
	public void requisitarAmizade(String idSessao, String login, AsyncCallback<Void> callback)
			throws Exception;

	public void localizarUsuario(String idSessao, String chave, String atributo, AsyncCallback<String> callback) throws Exception;
	
	public void localizarUsuario(String idSessao, AsyncCallback<String> callback)throws Exception;

	public void getAtributoItem(String idItem, String atributo, AsyncCallback<String> callback)throws Exception;

	public void cadastrarItem(String idSessao, String nome, String descricao, String categoria, AsyncCallback<String> callback) throws Exception;

	public void criarUsuario(String login, String nome, String endereco, AsyncCallback<Void> callback)throws Exception;

	public void abrirSessao(String login, AsyncCallback<String> callback) throws Exception;

	public void getAtributoUsuario(String login, String atributo,AsyncCallback<String> callback) throws Exception;
	
	public void getAmigos(String idSessao,AsyncCallback<String> callback) throws Exception;

	public void getAmigos(String idSessao, String login,AsyncCallback<String> callback) throws Exception;

	public void getItens(String idSessao,AsyncCallback<String> callback) throws Exception;

	public void getItens(String idSessao, String login,AsyncCallback<String> callback) throws Exception;
	
	public void requisitarEmprestimo(String idSessao, String idItem, int dias,AsyncCallback<String> callback) throws Exception;
	
	public void getEmprestimos(String idSessao, String tipo,AsyncCallback<String> callback)throws Exception;
	
	public void aprovarEmprestimo(String idSessao, String idRequisicaoEmprestimo,AsyncCallback<String> callback)throws Exception;
	
	
	public void devolverItem(String idSessao, String idEmprestimo,AsyncCallback<Void> callback) throws Exception;
	
	public void confirmarTerminoEmprestimo(String idSessao, String idEmprestimo,AsyncCallback<Void> callback) throws Exception;
	
	public void enviarMensagem (String idSessao, String destinatario, String assunto, String mensagem,AsyncCallback<String> callback) throws Exception;
	
	public void enviarMensagem (String idSessao, String destinatario, String assunto, String mensagem, String idRequisicaoEmprestimo,AsyncCallback<String> callback) throws Exception;
	
	public void  lerTopicos (String idSessao, String tipo,AsyncCallback<String> callback) throws Exception;
	
	public void lerMensagens (String idSessao, String idTopico,AsyncCallback<String> callback) throws Exception;
	
	public void requisitarDevolucao(String idSessao, String idEmprestimo,AsyncCallback<Void> callback) throws Exception;
		
	public void adicionarDias(int dias,AsyncCallback<Void> callback);
	
	public void registrarInteresse(String idSessao, String idItem,AsyncCallback<Void> callback) throws Exception;
	
	public void pesquisarItem (String idSessao, String chave, String atributo, String tipoOrdenacao, String criterioOrdenacao,AsyncCallback<String> callback) throws Exception;
	
	public void desfazerAmizade (String idSessao, String loginAmigo,AsyncCallback<Void> callback) throws Exception; 
	
	public void apagarItem (String idSessao, String idItem,AsyncCallback<Void> callback) throws Exception;
	
	public void getRanking(String idSessao, String categoria,AsyncCallback<String> callback) throws Exception;
	
	public void historicoAtividades(String idSessao,AsyncCallback<String> callback) throws Exception;
	
	public void historicoAtividadesConjunto(String idSessao,AsyncCallback<String> callback) throws Exception;
	
	public void publicarPedido (String idSessao, String nomeItem, String descricaoItem,AsyncCallback<String> callback) throws Exception;
	
	public void oferecerItem (String idSessao, String idPublicacaoPedido, String idItem,AsyncCallback<Void> callback) throws Exception;
	
	public void rePublicarPedido (String idSessao, String idPublicacaoPedido,AsyncCallback<Void> callback) throws Exception;
}
